home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 October: Mac OS SDK / Dev.CD Oct 97 SDK1.toast / Development Kits (Disc 1) / QuickDraw GX / Programming Stuff / Sample Code / Typography Samples / Dave’s Fab Samples ƒ / GetGlyphOffsets Example.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-06-19  |  4.0 KB  |  133 lines  |  [TEXT/KAHL]

  1. /****************************************************************************************************
  2.     6/96 bob    Updated #includes to support changed GX Library names.
  3.  
  4.     1.0D2 ???    change transfer modes from gxXorMode to gxFastXorMode
  5.                 and change SetShapeCommonTransfer to SetShapeFastTransfer 
  6.             
  7.     1.0B3 ???    change GXGetGlyphOffsets to GXGetGlyphOffset
  8.     
  9.     ©1990 - 1996  Apple Computer, Inc.
  10.     All rights reserved.
  11. ****************************************************************************************************/
  12.  
  13. #include <Types.h>
  14. #include <QuickDraw.h>
  15. #include <Fonts.h>
  16. #include <Windows.h>
  17. #include <Menus.h>
  18. #include <SegLoad.h>
  19. #include <Memory.h>
  20. #include <Desk.h>
  21.  
  22. #include <GXGraphics.h>
  23. #include "GraphicsLibraries.h"
  24. #include <GXEnvironment.h>
  25.  
  26. #include <GXTypes.h>
  27. #define gxDefine_true_false_boolean
  28.  
  29. #include <GXLayout.h>
  30. #include "LayoutLibrary.h"
  31. #include "LayoutFeatureConstants.h"
  32.  
  33. #include "SampleInterface.h"
  34.  
  35. short MyStrLen(char *x);
  36. static short MyStrLen(x)
  37. char    *x;
  38.     {
  39.     short c = 0;
  40.     while (*x++) c++;
  41.     return c;
  42.     }    /* MyStrLen */
  43.  
  44. void GetGlyphOffsetsExample(WindowPtr sampleWindow)
  45.     {
  46.     /* Variables */
  47.     Boolean            leadingEdge, wasRealCharacter;
  48.     char            *myString = "fish-flavored stenographer";
  49.     gxByteOffset        offset;
  50.     gxPoint            myPoint;
  51.     gxRunFeature        gxRunFeature[5];
  52.     gxShape            highlight, layout;
  53.     short            len, level = 0;
  54.     gxStyle            myStyle;
  55.     gxViewPort        aViewPort;
  56.     
  57.     /* Initialization */
  58.     
  59.     myPoint.x = ff(20);
  60.     myPoint.y = ff(80);
  61.     
  62.     aViewPort = GXNewWindowViewPort(sampleWindow);
  63.     SetDefaultViewPort(aViewPort);
  64.     
  65.     len = MyStrLen(myString);
  66.     
  67.     myStyle = NewLayoutStyle((char *) "\pHoefler Text Italic", ff(60), 0, nil, nil, 0, nil);
  68.     gxRunFeature[0].featureType = ligatureType;
  69.     gxRunFeature[0].featureSelector = ligatureRequiredOffSelector;
  70.     gxRunFeature[1].featureType = ligatureType;
  71.     gxRunFeature[1].featureSelector = ligatureCommonOffSelector;
  72.     gxRunFeature[2].featureType = ligatureType;
  73.     gxRunFeature[2].featureSelector = ligatureRareOffSelector;
  74.     gxRunFeature[3].featureType = ligatureType;
  75.     gxRunFeature[3].featureSelector = ligatureLogotypeOffSelector;
  76.     gxRunFeature[4].featureType = ligatureType;
  77.     gxRunFeature[4].featureSelector = ligatureRebusOffSelector;
  78.     GXSetStyleRunFeatures(myStyle, 5, gxRunFeature);
  79.     
  80.     layout = GXNewLayout(
  81.         1, &len, (void *) &myString,
  82.         1, &len, &myStyle,
  83.         1, &len, &level,
  84.         nil, &myPoint);
  85.     GXDrawShape(layout);
  86.     GXGetGlyphOffset(layout, 17, true, &offset, &leadingEdge, &wasRealCharacter);
  87.     highlight = GXGetLayoutHighlight(layout, offset, offset + 1, gxHighlightAverageAngle, nil);
  88.     /* changed to make this invert */
  89.     SetShapeFastXorTransfer(highlight, NULL, NULL);
  90.     GXDrawShape(highlight);
  91.     GXDisposeShape(layout);
  92.     GXDisposeShape(highlight);
  93.     
  94.     gxRunFeature[0].featureSelector = ligatureRequiredOnSelector;
  95.     gxRunFeature[1].featureSelector = ligatureCommonOnSelector;
  96.     GXSetStyleRunFeatures(myStyle, 5, gxRunFeature);
  97.     myPoint.y += ff(75);
  98.     
  99.     layout = GXNewLayout(
  100.         1, &len, (void *) &myString,
  101.         1, &len, &myStyle,
  102.         1, &len, &level,
  103.         nil, &myPoint);
  104.     GXDrawShape(layout);
  105.     GXGetGlyphOffset(layout, 17, true, &offset, &leadingEdge, &wasRealCharacter);
  106.     highlight = GXGetLayoutHighlight(layout, offset, offset + 1, gxHighlightAverageAngle, nil);
  107.     /* changed to make this invert */
  108.     SetShapeFastXorTransfer(highlight, NULL, NULL);
  109.     GXDrawShape(highlight);
  110.     GXDisposeShape(layout);
  111.     GXDisposeShape(highlight);
  112.     
  113.     gxRunFeature[2].featureSelector = ligatureRareOnSelector;
  114.     GXSetStyleRunFeatures(myStyle, 5, gxRunFeature);
  115.     myPoint.y += ff(75);
  116.     
  117.     layout = GXNewLayout(
  118.         1, &len, (void *) &myString,
  119.         1, &len, &myStyle,
  120.         1, &len, &level,
  121.         nil, &myPoint);
  122.     GXDrawShape(layout);
  123.     GXGetGlyphOffset(layout, 17, true, &offset, &leadingEdge, &wasRealCharacter);
  124.     highlight = GXGetLayoutHighlight(layout, offset, offset + 1, gxHighlightAverageAngle, nil);
  125.     /* changed to make this invert */
  126.     SetShapeFastXorTransfer(highlight, NULL, NULL);
  127.     GXDrawShape(highlight);
  128.     GXDisposeShape(layout);
  129.     GXDisposeShape(highlight);
  130.     
  131.     GXDisposeViewPort(aViewPort);
  132.     }    /* main */
  133.